package it.orma.iridehr.repository.azienda;

import it.orma.iridehr.entities.*;
import it.orma.iridehr.entities.azienda.Azienda;
import it.orma.iridehr.entities.azienda.ContattoAzienda;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
public class AziendaRepository{

	static Logger log = LogManager.getLogger(AziendaRepository.class);

	@PersistenceContext
	private EntityManager entityManager;

	public void salvaDatiGenerali(DatiGenerali datiGenerali){
		log.info(ToStringBuilder.reflectionToString(datiGenerali));
		datiGenerali.getSchedaCandidato().setDataModifica(new Date());
		entityManager.merge(datiGenerali);
	}

	public void salvaTitoloDiStudio(TitoloDiStudio titoloDiStudio) {
		if (titoloDiStudio.getIdTitoloDiStudio()==null){
			entityManager.persist(titoloDiStudio);
		} else {
			entityManager.merge(titoloDiStudio);
		}

	}

	public void cancellaTitoloDiStudio(Long idTitoloDiStudio) {

		entityManager.remove(entityManager.find(TitoloDiStudio.class, idTitoloDiStudio));

	}

	public void salvaStudiCompiuti(StudiCompiuti studiCompiuti) {
		entityManager.merge(studiCompiuti);

	}

	public void salvaLingueConosciute(LingueConosciute lingueConosciute) {
		entityManager.merge(lingueConosciute);

	}
	
	public void cancellaContatto(Long idContatto){
		entityManager.remove(entityManager.find(ContattoAzienda.class,idContatto));
	}
	
	public void salvaAltraLingua(AltraLingua altraLingua) {
		if (altraLingua.getIdAltraLingua()==null){
			altraLingua.setDataCreazione(new Date());
			entityManager.persist(altraLingua);
		} else {
			altraLingua.setDataModifica(new Date());
			entityManager.merge(altraLingua);
		}

	}

	public void cancellaAltraLingua(Long idAltraLingua) {
		AltraLingua a = entityManager.find(AltraLingua.class, idAltraLingua);
		entityManager.remove(a);


	}

	public void salvaConoscenzeInformatiche(ConoscenzeInformatiche conoscenzeInformatiche) {
		entityManager.merge(conoscenzeInformatiche);
	}
	

	public void creaNuovoCandidato(DatiGenerali datiGenerali) {
		entityManager.persist(datiGenerali.getSchedaCandidato());
		entityManager.persist(datiGenerali);
		entityManager.flush();
		entityManager.detach(datiGenerali);
		entityManager.detach(datiGenerali.getSchedaCandidato());
		
	}

	public void trattamentoAccettato(SchedaCandidato schedaCandidato) {
		entityManager.merge(schedaCandidato);
		entityManager.flush();
	}

	public void salvaContatto(ContattoAzienda contatto) {

		if (contatto.getIdContatto()==null) {
			contatto.setDataCreazione(new Date());			
			entityManager.persist(contatto);
		} else {
			contatto.setDataModifica(new Date());
			entityManager.merge(contatto);
			
		}
		entityManager.flush();
		entityManager.detach(contatto);	
	}

	public void salvaDatiAnagrafici(Azienda azienda) {
		
		if (azienda.getIdAzienda()==null) {
			azienda.setDataCreazione(new Date());			
			entityManager.persist(azienda);
		} else {
			azienda.setDataModifica(new Date());
			entityManager.merge(azienda);
			
		}
		entityManager.flush();
		entityManager.detach(azienda);	
		
	}
	
}

